package com.molichuxing.services.infrastructure.service;

import com.molichuxing.services.business.dto.response.StatisticsAssetOrderDto;
import com.molichuxing.services.infrastructure.dto.request.create.StatisticsAssetCreateDto;
import com.molichuxing.services.infrastructure.dto.response.StatisticsAssetDto;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 资产统计
 * </p>
 *
 * @author zhaopenghui
 * @since 2020-08-25
 */
public interface StatisticsAssetService {

    /**
     * 获取资产统计个数
     *
     * @return
     */
    Map<Integer, Integer> getStatisticsAssetCount(LocalDateTime dateTime);

    /**
     * 获取资产统计列表
     *
     * @param dateTime
     * @return
     */
    List<StatisticsAssetDto> getStatisticsAssetList(LocalDateTime dateTime);

    /**
     * 删除数据
     *
     * @return
     */
    Boolean deleteAsset();

    /**
     * 报废车：专属里程退租车辆标记为报废的车辆
     *
     * @return the scrapped car statistics asset order
     */
    List<StatisticsAssetOrderDto> getScrappedCarStatisticsAssetOrder();

    /**
     * 丢失车：专属里程退租车辆标记为丢失的车辆；
     *
     * @return the lost car statistics asset order
     */
    List<StatisticsAssetOrderDto> getLostCarStatisticsAssetOrder();

    /**
     * 待收车：专属里程逾期后走协商退租未收车或收车失败的车辆数；
     *
     * @return the waiting car statistics asset order dto
     */
    List<StatisticsAssetOrderDto> getWaitingCarStatisticsAssetOrderDto();

    /**
     * 诉讼中：专属里程订单退租车辆未收车或收车失败且诉讼中的车辆数；
     *
     * @return the lawsuit car statistics asset order dto
     */
    List<StatisticsAssetOrderDto> getLawsuitCarStatisticsAssetOrderDto();

    /**
     * 批售：新车标记为已出售的车辆数；
     *
     * @return the batch sale car statistics asset order dto
     */
    List<StatisticsAssetOrderDto> getBatchSaleCarStatisticsAssetOrderDto();

    /**
     * 实际在库：未做过任何业务在库的车辆数；
     *
     * @return the in car store statistics asset order dto
     */
    List<StatisticsAssetOrderDto> getInCarStoreStatisticsAssetOrderDto();

    /**
     * 公务车：标记为公务车的车辆数；
     *
     * @return the list
     */
    List<StatisticsAssetOrderDto> geOfficialCarStatisticsAssetOrderDto();


    /**
     * Save batch statistics asset.
     *
     * @param list the list
     */
    void saveBatchStatisticsAsset(List<StatisticsAssetCreateDto> list);
}
